package gdr.battle.data;

import gdr.player.Team;

import java.util.LinkedList;

public class GestoreTurni{
	/**
	 * conta il numero di turni trascorsi
	 */
	protected int contatoreTurni;
	/**
	 * in ogni momento, deve essere attivo solo un team, tutti gli altri non possono eseguire azioni.
	 */
	protected LinkedList<Team> listaTurni;
	protected LinkedList<Team> listaTurnoSuccessivo;
	
	public GestoreTurni(){
		contatoreTurni = 1;
		listaTurni = new LinkedList<Team>();
		listaTurnoSuccessivo = new LinkedList<Team>();
	}
	/**
	 * Restituisce il team attivo
	 * @return
	 */
	public Team getActiveTeam(){
		if (!listaTurni.isEmpty())
			return listaTurni.getFirst();
		return null;
	}
	
	public void update(){
		for (int i=0; i<listaTurni.size(); i++)
			if (listaTurni.get(i).getCondizionePerdita().check())
				listaTurni.remove(i);
		for (int i=0; i<listaTurnoSuccessivo.size(); i++)
			if (listaTurnoSuccessivo.get(i).getCondizionePerdita().check())
				listaTurnoSuccessivo.remove(i);
	}
	
	/**
	 * carica il team successivo, se quello attuale e' sconfitto, lo rimuove.
	 * La condizione di sconfitta viene valutata in base alla CondizioneSconfitta
	 * del team.
	 */
	public void loadNextTeam(){
		Team t = listaTurni.removeFirst();
		if (! t.getCondizionePerdita().check())
			listaTurnoSuccessivo.addLast(t);
		//finita la lista, carico il prossimo turno
		if (listaTurni.isEmpty()){
			contatoreTurni++;
			listaTurni = listaTurnoSuccessivo;
			listaTurnoSuccessivo = new LinkedList<Team>();
		}
	}
	/**
	 * Numero di team attivi
	 */
	public int getNumeroTeam(){
		return listaTurni.size()+listaTurnoSuccessivo.size();
	}
	
	
	public int getContatoreTurni() {
		return contatoreTurni;
	}
	public void setContatoreTurni(int contatoreTurni) {
		this.contatoreTurni = contatoreTurni;
	}
	public LinkedList<Team> getListaTurni() {
		return listaTurni;
	}
	public void setListaTurni(LinkedList<Team> listaTurni) {
		this.listaTurni = listaTurni;
	}
	public LinkedList<Team> getListaTurnoSuccessivo() {
		return listaTurnoSuccessivo;
	}
	public void setListaTurnoSuccessivo(LinkedList<Team> listaTurnoSuccessivo) {
		this.listaTurnoSuccessivo = listaTurnoSuccessivo;
	}
}
